package net.chathu.airgw.packets.gw.clientpackets 
{
	import net.chathu.airgw.Config;
	import net.chathu.airgw.model.conn.P2PChatConnection;
	import net.chathu.airgw.model.SessionData;
	import net.chathu.airgw.model.User;
	import net.chathu.airgw.model.UserList;
	import net.chathu.airgw.packets.gw.serverpackets.EchoPacket;
	import net.chathu.airgw.packets.gw.serverpackets.NickPacket;

	/**
	 * ...
	 * @author ze
	 */
	public class CMDNick extends IRCReceivablePacket
	{
		
		public function CMDNick() 
		{
			
		}
		
		override public function execute():void {
			if (Config.DEBUG)
			{
				sendToClient(new EchoPacket(Config.GW_ECHO_NICK, "Debug: " + data.join(" ")));
			}
			
			if (data.length >= 2)
			{
				
				var requestedNick:String = data[1];
				//az elejerol a : karatert vagjuk le
				if (requestedNick.indexOf(":") == 0)
				{
					requestedNick = requestedNick.substr(1);
				}
				
				sendToClient(new EchoPacket(Config.GW_ECHO_NICK, "Requested nick: " + requestedNick));
				if (!sessionData.nickReceived) //elso nick keres erkezik
				{
					
					if (isCorrectNick(requestedNick))
					{
						sessionData.nick = requestedNick;
						sessionData.nickReceived = true;
						
						if (!sessionData.alternativeLogin)
						{
							sessionData.soul.accountData.username = requestedNick;
						}
						
						if (sessionData.userReceived)
						{
							//ha megjott a user korabban:
							sessionData.soul.webLogin();	
						}
						
						sessionData.soul.p2pChatConnection = new P2PChatConnection(sessionData.soul);
					}
				} else {
					//mar van egy irc kompatibilis nickunk, de most masra valtanank
					//sendToClient(new EchoPacket(Config.GW_ECHO_NICK, "Nick váltás nem támogatott jelenleg!"));
					
					//1) nem lehet benne ^, mert azt majd a custom szobakban fogjuk hasznalni
					//2) irc kompatibilis a nick (nincs benne szokoz, stb)..
					//3) ha senki nem hasznalja epp a nicket (sajat nick eseten persze engedjen visszavaltani)
					
					/*if (requestedNick.indexOf("^") < 0) {
						var ircNick:String = UserList.createIRCCompatibleName(requestedNick);
						if (requestedNick == ircNick)
						{
							var user:User = User(sessionData.chatData.users.getUserByNameIgnoreCase(ircNick));
							//TODO kezelni azt az esetet, ha nem vagyunk kapcsolodva a chatre, de nicket valtanank!
							if (!user || user.id == sessionData.chatData.userId)
							{
								//TODO: ha a hostban benne van a nick, az problemat fog okozni!
								sessionData.nick = ircNick;
								sendToClient(new NickPacket(sessionData.yourHost, ircNick));
								
							} else {
								sendToClient(new EchoPacket(Config.GW_ECHO_NICK, "A megadott nick jelenleg használatban van!"));
							}
						} else {
							sendToClient(new EchoPacket(Config.GW_ECHO_NICK, "Nem IRC kompatibilis nick!"));
						}
					} else {
						sendToClient(new EchoPacket(Config.GW_ECHO_NICK, "A nick nem tartalmazhat ^ karaktert!"));
					}*/
					if (isCorrectNick(requestedNick))
					{
						sessionData.nick = requestedNick;
						sendToClient(new NickPacket(sessionData.yourHost, requestedNick));
					} else {
						sendToClient(new EchoPacket(Config.GW_ECHO_NICK, "Hibás nick: " + requestedNick));
					}
				}
			}
		};
		
		public static function getShortUsageDescription():String {
			return "Nick váltás";
		}
		
		public static function getUsageDescription():String {
			return "Példa:\n" +
				"/nick fül_elek\n\n" +
				"Eredmény:\n" + 
				"Debug: NICK fül_elek\n" +
				"Requested nick: fül_elek\n" +
				"Mostantól ezen a néven vagy ismert: fül_elek";
		}
		
		private function isCorrectNick(nick:String):Boolean {
			if (nick && nick.length > 2 && nick.indexOf("^") < 0)
			{
				var ircCompatibleNick:String = UserList.createIRCCompatibleName(nick);
				if (ircCompatibleNick == nick)
				{
					if (sessionData.chatData)
					{
						var user:User = User(sessionData.chatData.users.getUserByNameIgnoreCase(nick));
						if (!user || sessionData.chatData.userId!=0 || user.id == sessionData.chatData.userId)
						{
							return true;
						} 
					} else {
						return true;
					}
				}
			}
			return false;
		}
	}
}